describe('课程内功能', () => {
  beforeEach(() => {
    // 模拟登录
    cy.visit('/login')
    
    // 拦截登录请求 (使用更通用的匹配方式)
    cy.intercept('POST', '/api/users/login**', {
      statusCode: 200,
      body: {
        userId: 1,
        account: 'testuser',
        username: 'Test User',
        role: 'Teacher'
      }
    }).as('login')
    
    cy.get('[data-cy=account-input]').type('testuser')
    cy.get('[data-cy=password-input]').type('testpassword')
    cy.get('[data-cy=login-button]').click()
    cy.wait('@login', { timeout: 10000 }) // 等待登录完成
    
    // 拦截课程信息请求 (使用通配符确保匹配)
    cy.intercept('GET', '/api/courses/CS101**', {
      statusCode: 200,
      body: {
        courseId: 'CS101',
        courseName: '计算机科学导论',
        course: '这是一门计算机科学入门课程',
        teachingGoal: '掌握基本编程概念'
      }
    }).as('getCourse')
    
    // 拦截教师信息请求
    cy.intercept('GET', '/api/courses/course/CS101/teachers**', {
      statusCode: 200,
      body: ['张老师']
    }).as('getTeachers')
    
    // 拦截章节信息请求
    cy.intercept('GET', '/api/chapters/course/CS101**', {
      statusCode: 200,
      body: [
        { chapterId: 'CH1', chapterName: '第一章：入门' },
        { chapterId: 'CH2', chapterName: '第二章：基础概念' }
      ]
    }).as('getChapters')
    
    // 拦截用户角色请求
    cy.intercept('GET', '/api/exercises/role**', {
      statusCode: 200,
      body: 'teacher'
    }).as('getUserRole')
    
    // 进入课程主页（在设置拦截器之后）
    cy.visit('/course/CS101/info')
    
    // 等待所有请求完成
    cy.wait(['@getCourse', '@getTeachers', '@getChapters', '@getUserRole'], { timeout: 15000 })
  })

  it('显示课程基本信息', () => {
    cy.get('.section-title').should('contain.text', '教师 & 助教')
    cy.get('.section-title').should('contain.text', '课程信息')
    cy.get('.section-title').should('contain.text', '课程章节')
    
    cy.get('.card').should('be.visible')
    cy.contains('计算机科学导论').should('be.visible')
    cy.contains('CS101').should('be.visible')
  })

  it('显示章节信息', () => {
    cy.get('table tbody tr').should('have.length', 2)
    cy.contains('第1章').should('be.visible')
    cy.contains('第一章：入门').should('be.visible')
    cy.contains('第2章').should('be.visible')
    cy.contains('第二章：基础概念').should('be.visible')
  })

  it('教师可以创建章节', () => {
    // 拦截创建章节请求
    cy.intercept('POST', '/api/chapters**', {
      statusCode: 200,
      body: { 
        chapterId: 'CH3', 
        chapterName: '第三章：进阶内容',
        course: { courseId: 'CS101' }
      }
    }).as('createChapter')
    
    // 拦截更新后的章节列表
    cy.intercept('GET', '/api/chapters/course/CS101**', {
      statusCode: 200,
      body: [
        { chapterId: 'CH1', chapterName: '第一章：入门' },
        { chapterId: 'CH2', chapterName: '第二章：基础概念' },
        { chapterId: 'CH3', chapterName: '第三章：进阶内容' }
      ]
    }).as('updatedChapters')
    
    // 确认是教师角色
    cy.contains('教师').should('be.visible')
    
    // 查找并点击创建章节按钮（使用更通用的选择器）
    cy.get('button').contains('创建').should('be.visible').click({ force: true })
      .then(() => {}, (err) => {
        // 备用方案：通过类名查找
        cy.get('.btn-success').contains('创建').click({ force: true })
          .then(() => {}, (err) => {
            // 再备用方案：通过上下文查找
            cy.contains('课程章节').parent().next().find('button').contains('创建').click({ force: true })
          })
      })
    
    // 等待模态框出现
    cy.get('.modal-content-box', { timeout: 10000 }).should('be.visible')
    
    // 填写章节名称并创建
    cy.get('input[placeholder="请输入章节名称"]').should('be.visible').type('第三章：进阶内容')
    cy.get('.modal-content-box').contains('创建').should('be.visible').click()
    
    // 等待创建请求和更新后的章节列表
    cy.wait('@createChapter', { timeout: 10000 })
    cy.wait('@updatedChapters', { timeout: 10000 })
    
    // 验证章节已添加
    cy.get('table tbody tr').should('have.length', 3)
    cy.contains('第三章：进阶内容').should('be.visible')
  })

  it('教师可以删除章节', () => {
    // 拦截删除章节请求
    cy.intercept('DELETE', '/api/chapters/CH1**', {
      statusCode: 200
    }).as('deleteChapter')
    
    // 拦截更新后的章节列表
    cy.intercept('GET', '/api/chapters/course/CS101**', {
      statusCode: 200,
      body: [
        { chapterId: 'CH2', chapterName: '第二章：基础概念' }
      ]
    }).as('updatedChapters')
    
    // 查找并点击删除按钮
    cy.get('table tbody tr').first().contains('删除').should('be.visible').click({ force: true })
      .then(() => {}, (err) => {
        // 备用方案
        cy.get('table tbody tr').first().find('.btn-danger').click({ force: true })
      })
    
    // 确认删除
    cy.on('window:confirm', () => true)
    
    // 等待删除请求和更新后的章节列表
    cy.wait('@deleteChapter', { timeout: 10000 })
    cy.wait('@updatedChapters', { timeout: 10000 })
    
    // 验证章节已删除
    cy.get('table tbody tr').should('have.length', 1)
    cy.contains('第一章：入门').should('not.exist')
  })
})